const path = require('path')
const fs = require('fs')
const archiver = require('archiver')
const homedir = __dirname

const currentDate = new Date()
function formatDateTimePart (part) {
  return part < 10 ? `0${part}` : `${part}`
}
// 获取年月日时分秒
function GetYearMonthDayHourMinuteSecond () {
  const year = currentDate.getFullYear()
  let month = currentDate.getMonth() + 1
  let date = currentDate.getDate()

  let hour = currentDate.getHours()
  let minute = currentDate.getMinutes()
  let second = currentDate.getSeconds()

  hour = formatDateTimePart(hour)
  month = formatDateTimePart(month)
  date = formatDateTimePart(date)
  minute = formatDateTimePart(minute)
  return `${year}${month}${date}${hour}${minute}${second}`
}

// 使用模板字符串
let fileName = `dist-${GetYearMonthDayHourMinuteSecond()}.zip`
// 假设这是最终确定的，且已验证的安全路径列表
const target = ['dist']
// 使用path.join保证跨平台路径拼接
const zipFile = path.join(homedir, fileName)

// 检查文件是否存在于当前目录中，若存在则删除，避免覆盖
fs.access(zipFile, fs.constants.F_OK, (err) => {
  if (err) {
    console.log(`${zipFile} 不存在`)
  } else {
    console.log(`${zipFile} 存在，将被新生成的文件覆盖`)
    fs.unlinkSync(zipFile)
  }
})

const output = fs.createWriteStream(zipFile)
const archive = archiver('zip')

archive.on('error', function (err) {
  console.error('压缩过程中出现错误:', err)
  // 可以在这里添加更多的错误处理逻辑，比如清理已创建的文件等
})

output.on('close', function () {
  console.log(`     ----------------------------压缩完毕---------------------------
     生成文件大小${(archive.pointer() / 1024 / 1024).toFixed(1)}MB
     请在当前项目路径下寻找 ${path.basename(zipFile)}, 系统路径为 ${zipFile}     ---------如需配置生成路径或文件名, 请配置output---------
     `)
})

archive.pipe(output)

// 遍历目标目录列表，并添加到压缩包中
target.forEach((dir) => {
  // 确保目录是相对于当前工作目录的，或已经过适当验证
  archive.directory(dir, dir)
})

archive.finalize().then(r => console.log(r))
